#ifndef __GT911_H__
#define __GT911_H__

#include "stm32f4xx.h"
/* 表示读数据 */ 
#define I2C_M_RD		0x0001	

/*
 * 存储I2C通讯的信息
 * @addr：  从设备的I2C设备地址	
 * @flags: 控制标志
 * @len：  读写数据的长度
 * @buf：  存储读写数据的指针
 **/
struct i2c_msg {
	uint8_t addr;		/*从设备的I2C设备地址 */
	uint16_t flags;	/*控制标志*/
	uint16_t len;		/*读写数据的长度			*/
	uint8_t *buf;		/*存储读写数据的指针	*/
};

typedef struct touch_msg {
	uint32_t id;		/*从设备的I2C设备地址 */
	uint32_t x;	/*控制标志*/
	uint32_t y;		/*读写数据的长度			*/
	uint8_t flag;		/*存储读写数据的指针	*/
    uint8_t GTP_Touch_Down_flag;
} touch_t;

extern touch_t touch_info;
/** 
  * @brief 触摸屏参数
  */
typedef struct
{
  /*根据触摸屏类型配置*/
  uint16_t max_width;  //触点最大值,高
  uint16_t max_height;  //触点最大值，宽

  uint16_t config_reg_addr;  	//不同类型的触摸ic配置寄存器地址不同

}TOUCH_PARAM_TypeDef;

typedef enum 
{
    GT917S=0,
    GT911=1,
    GT5688=2,
    GT9147=3,
    GT9157=4,
}TOUCH_IC;


#define CFG_GROUP_LEN(p_cfg_grp)  (sizeof(p_cfg_grp) / sizeof(p_cfg_grp[0]))
#define GTP_REG_CONFIG_DATA       touch_param[touchIC].config_reg_addr
#define GTP_ADDR_LENGTH           2
#define GTP_REG_VERSION           0x8140
#define GTP_CONFIG_MAX_LENGTH     256
#define GTP_MAX_HEIGHT            480
#define GTP_MAX_WIDTH             800
#define GTP_INT_TRIGGER           0
#define GTP_READ_COOR_ADDR        0x814E
#define GTP_REG_SLEEP             0x8040
#define GTP_REG_SENSOR_ID         0x814A
#define GTP_MAX_TOUCH             5
#define SCAN_MODE                 0  //触摸屏扫描模式   


int32_t gt911_init(void);
int8_t gt911_init_test( void);
int32_t GTP_Read_Version(void);
int32_t GTP_I2C_Read(uint8_t client_addr, uint8_t *buf, int32_t len);
int I2C_Transfer( struct i2c_msg *msgs,int num);
int32_t GTP_I2C_Write(uint8_t client_addr,uint8_t *buf,int32_t len);
int32_t GTP_Get_Info(void);
void Touch_Button_Up(uint16_t x,uint16_t y);
void GTP_Touch_Down(int32_t id,int32_t x,int32_t y,int32_t w);
void Goodix_TS_Work_Func(void);
void GTP_Touch_Up( int32_t id);
#endif  //__GT991_H__